home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / tcp_ip.arc / HOWTO.DOC < prev    next >
Encoding:
Text File  |  1987-09-22  |  73.1 KB  |  1,551 lines

  1.        Getting Started with the KA9Q TCP/IP Networking Code
  2.                 by
  3.             Brian Lloyd, WB6RQN
  4.  
  5.                              V-870921
  6.  
  7.  
  8.  
  9. Copyright, 1987, Sirius Systems, Incorporated, all rights reserved.  
  10. Permission is hereby granted to reproduce this documentation all or in 
  11. part so long as the following conditions are met:
  12.  
  13.     1. All reproductions must fully credit the author and Sirius 
  14.            Systems, Inc., as the source.
  15.  
  16.     2. Copies of this document may not be used for any commercial
  17.        purpose without the express written permission of Sirius
  18.        Systems, Inc., 19200 Tilford Way, Germantown, MD, 20874.
  19.  
  20. Introduction:
  21.  
  22. Phil Karn, KA9Q, Bdale Garbee, N3EUA, Mike Chepponis, K3MC, and others
  23. now too numerous to mention, have constructed a very nice networking 
  24. package for packet radio.  Their documentation is clear, interesting, and
  25. informative.  Unfortunately it is more of a reference than a tutorial and,
  26. as such, is not as useful to the first-time user.  This document is an 
  27. attempt to provide you with the information you need to get up and 
  28. running right now!  After it works you can go back and read all the other
  29. informative material and understand better what you did.
  30.  
  31. Before we go any further I want to point out that NET and BM were
  32. written to further the art of amateur packet radio technology and many
  33. of the commands and suggestions are made with that in mind.  If you are
  34. in an academic environment or are simply interested in the concepts of
  35. the Internet Protocol Suite (TCP/IP) and are not a radio amateur (ham), 
  36. you can probably skip the section dealing with TNC's.  Other areas dealing
  37. with packet radio are also pretty well marked so you can also take them 
  38. with a grain of salt as well.
  39.  
  40. Configuring Your TNC for Network Operation:
  41.  
  42. There are now several choices for TNC's to be used with the TCP/IP network
  43. code.  Versions of the Keep It Simple Stupid TNC interface software (KISS)
  44. are available for the TNC-2, the TNC-1, and the VADCG board and clones 
  45. (Ashby), the Kantronics family of TNC's, and the AEA TNC's.  Here are the
  46. different setup/configuration modes for the different TNC's:
  47.  
  48. TNC-2:
  49.  
  50. First step is to prepare your TNC-2 for use with TCP/IP.  The standard
  51. firmware for the TNC-2 is not very computer friendly and, as such, is not
  52. very useful when it comes time to make your computer speak with other 
  53. computers.  To that end Mike Chepponis wrote the KISS (Keep It Simple 
  54. Stupid) TNC code.  There are two ROM versions for the TNC-2.  The first is 
  55. contained in a type 2764 or 27C64 EPROM.  This version contains the KISS 
  56. code in it.  The second version is contained in a type 27256 or 27C256 
  57. EPROM and contains both the standard TAPR 1.1.3 TNC code and a loader that 
  58. will permit you to download the KISS code into the TNC.  Check the EPROM you
  59. have received and determine which type you have.  If you are burning your
  60. own EPROMs you probably do not need these instructions.
  61.  
  62. Open up your TNC and locate the ROM.  It is in the socket labled "U23."  
  63. Using a small nail file or screwdriver gently pry up the existing EPROM.  
  64. Carefully press the new EPROM into place being sure that the orientation is
  65. the same.  If you are installing the 2764 type of EPROM you will need to
  66. make a small modification to the TNC.  There is a location on the board just 
  67. above the first RAM socket labled JMP-6.  Turn the board over and cut the 
  68. trace joining the two pads.  Solder a two-pin jumper header in place.  When 
  69. using a type 2764 the jumper at JMP-6 should be removed and installed when a 
  70. type 27256 EPROM is being used.  That should complete the hardware part of 
  71. the installation.
  72.  
  73. Attach your TNC to your PC using an RS-232C cable.  You can use the same
  74. cable that you were using to connect your PC to your TNC.  If you are doing
  75. this for the first time and are not sure about your cabling, a cable with
  76. just pins 2, 3, and 7 passed through is sufficient.  Some PCs like to see
  77. the signals Clear To Send (CTS, pin 5), Data Set Ready (DSR, pin 6), and
  78. Data Carrier Detect (DCD, pin 8) asserted.  You can set this up by
  79. jumpering pin 4 to 5, and pin 20 to pins 6 and 8 at the female DB-25
  80. connector that goes to the PC.
  81.  
  82. Now to verify that the TNC still works.  Apply power to the TNC and turn it
  83. on.  The STA, CON, and PWR LEDs should come on and the STA and CON lights
  84. should go out again about 1 second later.  If you have the type 2764 EPROM
  85. with the KISS code in it one or both of the STA and CON LEDs will begin to
  86. flash.  If the CON LED flashes you have 8Kb of RAM in the TNC.  If the STA
  87. LED flashes you have 16Kb of RAM.  If both LEDs flash you have 32 Kb of
  88. RAM.  The flashing of the LEDs verifies the proper operation of the TNC.
  89.  
  90. If you got the combined loader and TAPR version EPROM, checkout is a
  91. slightly different process.  You can test your TNC-2 using two methods.  The
  92. first method is to connect your TNC to a terminal program and send the
  93. character 'h' or 'H' to the TNC.  The result should be the standard TNC
  94. startup message.  Exit from the 1.1.3 mode of operation by issuing the
  95. reset command to the TNC.  The second method involves downloading the KISS
  96. code to the TNC.  Use the mode command to set the baud rate of the comm
  97. port to the proper value, e.g. it matches the DIP switch setting on the 
  98. back of the TNC, and copy the file tnc2kiss.hex to the appropriate comm
  99. port.  The following command sequence will serve to download the KISS
  100. code to the TNC:
  101.  
  102.     mode com1:4800
  103.     copy tnc2kiss.hex com1:
  104.  
  105. If the download was successful the STA and/or CON LEDs will begin
  106. flashing as described in the previous paragraph.  If the download is not
  107. successful check the cable from computer to TNC, check the baud rate on the
  108. TNC, and check to insure that the computer is indeed sending data to the
  109. TNC.  Once this is done the TNC is ready to use with the NET program.
  110.  
  111.      NOTE: running KISS causes the stored parameters in the TNC, i.e.
  112.      MYCALL, NEWMODE, TXDELAY, etc., to be destroyed.  Every time you
  113.      shift from KISS to TAPR modes you MUST reset the parameters.
  114.  
  115. TNC-1 or Heath HD-4040:
  116.  
  117. The firmware for the TNC-1 is available in either a downloadable version or
  118. a standalone version.  I will describe only the standalone version here.
  119. Locate the ROM labled E000 and remove it.  Insert the KISS PROM in its
  120. place making sure that you orient the prom in the same direction (failure
  121. to do so will result in smoked PROM).  Connect your TNC-1 to your computer
  122. using an RS-232 cable.  A cable that passes the signals from pins 2, 3, and
  123. 7 should be sufficient but just to be safe jumper pins 4 to 5, and pin 20 to 
  124. pins 6 and 8 on the computer end (this is to insure that the signals CTS, 
  125. DSR, and DCD are asserted at the computer).
  126.  
  127. Since the TNC-1 has no switches for setting the baud rate to the computer
  128. the firmware has an autobaud routine to determine the opperating speed of
  129. the computer.  Using a terminal program send several carriage return
  130. characters to the TNC-1 immediately following power-up.  Start the net
  131. program and you should be running.
  132.  
  133. AEA PK-232, PK-87, or new Heath TNC (PK-232 clone):
  134.  
  135. If you have one of these boxes, congratulations!  You do not have to change
  136. PROMS!  KISS is already installed as a standard feature if you have a
  137. recent release of the firmware, 4-MAR-87 or later for the PK-232, or
  138. 21-JAN-87 or later for the PK-87, you have KISS in your TNC already.
  139. To make it work first insure that your computer can communicate with the 
  140. TNC in standard packet mode.  This will insure that the computer, TNC,
  141. cabling, and radio are all operating properly.  
  142.  
  143. [Please note that one of the commands "PACKET" is not valid on the PK-87 and
  144. will only elict a "Huh?" response.  Please note that comments have been 
  145. added to the commands.  Do not type the information following the double 
  146. dash or type the double dash itself.]
  147.  
  148. Here is the sequence of commands that will turn on the KISS mode for the
  149. AEA products:
  150.  
  151. AWLEN 8        -- insure it can speak 8 bit data
  152. PARITY 0    -- no parity
  153. RESTART        -- warm reset; make the previous commands take effect
  154. PACKET        -- PK-232 or Heath only
  155. TONE 3        -- PK-87 only
  156. START 0        -- start, stop, xon, xoff, xflow to disable software 
  157. STOP 0           flow cont
  158. XON 0
  159. XOFF 0
  160. XFLOW off
  161. CONMODE trans    -- pass through all characters
  162. HPOLL off    -- disable host polling
  163. KISS on        -- enable KISS version of host mode
  164. RAWHDLC on    -- turn off AX25L2 (the protocol is now handled by the PC)
  165. PPERSIST on    -- turn off DWAIT and enable p-persistence
  166. HOST on        -- start KISS running
  167.  
  168. The PK-87 or the PK-232 will remain in the KISS mode until you send a break
  169. (~200ms of spacing) or until you send the command character three times (^C
  170. ^C ^C) in quick succession.  Beware!  Some terminal emulators (like YAPP)
  171. will send a break signal when you exit from them.  That will undo your work
  172. and cause all manner of confusion.  The terminal program PROCOMM seems to
  173. work just fine.  The TNC may also be switched back to ordinary AX.25 mode by 
  174. issuing the following command from within NET.EXE:
  175.  
  176.     param ax0 FF
  177.  
  178. Kantronics:
  179.  
  180. Kantronics has recently begun to offer KISS on their products.  It is
  181. the simplest of the commercial implementations of KISS to configure and
  182. use.
  183.  
  184. First setup and operate your KAM, KPC-II, or KPC-4 for standard packet 
  185. operation.  This will insure that the computer, TNC, cabling, and radio
  186. are operating properly.  Use your terminal program to send the following
  187. commands:
  188.  
  189. ABAUD 4800    -- set the baudrate to whatever you will be using when
  190.            net is running (set by the attach command)
  191. DWAIT 0        -- disable DWAIT
  192. PERSIST 50    -- enable persistence and set it to about 20%
  193. SLOTTIME 16    -- set the slot time to 160 ms
  194. KISS ON        -- Enable KISS mode at the next reset
  195. PERM        -- make the above command permanent so that KISS
  196.            will be entered whenever the TNC is powered up
  197. RESET        -- start KISS
  198.  
  199. If you wish to have the the TNC revert back to ordinary AX.25 mode of
  200. operation you should omit the PERM command from the above sequence. 
  201. That way the TNC will revert back to ordinary AX.25 mode when the power
  202. is removed and restored to the TNC.  The TNC may be switched back to
  203. ordinary AX.25 mode by issuing the command:
  204.  
  205.     param ax0 FF
  206.  
  207. This command will work even if the PERM command has been used to make 
  208. KISS the default mode of operation.
  209.  
  210. Installing and Configuring the Net Software:
  211.  
  212. Create a directory called EXE and set that as the default directory.  Use
  213. PKXARC to extract the files from EXE.ARC into the new directory.  Should
  214. you not have PKXARC already run the program PKX35A35.EXE provided with
  215. the distribution.  This program will create the extraction utility and
  216. its documentation.
  217.  
  218. There are two programs that make up the network software: NET.EXE (the 
  219. networking code) and BM.EXE (the mail program).  Copy these programs from
  220. the EXE directory to the place on your hard disk where you keep command 
  221. programs.  If you are running on a floppy based system you should create 
  222. a bootable floppy and copy these programs to the floppy.  
  223.  
  224. Test to make sure that everything is there by executing the programs.  Type 
  225. the command "net" and, if the installation of the network code was 
  226. successful, the message "KA9Q internet protocol package" and the prompt 
  227. "net>" will appear on the screen.  This means that the network code is 
  228. running and awaiting commands.
  229.  
  230. Exit from the net code with the command "exit."  Now run the command "bm."
  231. The screen should display the message "Bdale's Messy-DOS Mailer" and the
  232. prompt "Brian"> will appear.  If all this has occurred, all is well so far.
  233. If you do not get this response from bm, do not be concerned.  Try again
  234. after you have configured bm in the following steps.
  235.  
  236. First step is to configure the mailer (BM).  To make BM work properly you
  237. must create the following directories on your disk:
  238.  
  239.     \spool
  240.     \spool\mail
  241.     \spool\mqueue
  242.  
  243. Copy the file SEQUENCE.SEQ to the \spool\mqueue directory.  Copy the files 
  244. HOSTS.NET and BM.RC to the root directory of the default drive used when 
  245. net is running.  If you are on a floppy based system you need to put BM.RC 
  246. with NET.EXE, BM.EXE, AUTOEXEC.NET, HOSTS.NET, and AUTOEXEC.BAT in the 
  247. root (\) directory (more on AUTOEXEC.NET later).
  248.  
  249. HOSTS.NET
  250.  
  251. You will need to edit the file HOSTS.NET to know about all the systems with 
  252. which you will exchange mail.  This is how net will translate the name into 
  253. the IP address.  Here is an example of some of the entries I have in my 
  254. machine for other local TCP/IP stations:
  255.  
  256.     44.96.0.2    WB2SEF
  257.     44.96.0.16    N8FJB
  258.     44.96.0.17    KA3LYQ Roel
  259.  
  260. All this does is translate the symbolic name to the IP address, e.g. WB2SEF
  261. gets translated to 44.96.0.2 so that IP can route it to the proper network 
  262. node.  This saves you from having to remember lots of numbers.  You may
  263. note that the last entry has two aliases, either of which may be used to
  264. specify the IP address 44.96.0.17.
  265.  
  266. BM.RC
  267.  
  268. Next edit the file BM.RC.  This file lets the mail system know about local
  269. host name, user name, editor name, and the name of "punt to" system.  Here 
  270. are some example entries:
  271.  
  272.     host wb6rqn-pc.dc.ampr.us
  273.     user brian
  274.     edit emacs
  275.  
  276. The edit entry should contain the name of your favorite editor, such as
  277. edlin (edlin is not your favorite editor?).  This editor will be used to
  278. construct a mail message when you invoke that function of bm.  You may use
  279. any DOS compatible editor just so long as it has the capability to prepare
  280. ascii files (be careful if you specify a word processor -- some word
  281. processors embed special characters in the file).
  282.  
  283. Later on you can read the documents BM.DOC and SMTP.DOC to get more
  284. information.  You at least have enough info to get your mailer running now.
  285.  
  286. FTPUSERS
  287.  
  288. Now you need to possibly modify the \FTPUSERS file to permit users to send
  289. and receive files from your system.  The FTPUSERS file contains the
  290. information about users in the following format:
  291.  
  292.     user password \directory permission-code
  293.  
  294. The 'user' entry is the user's name, 'password' is the password for that
  295. user, '\directory' is the directory to which the user will have access (all
  296. of the subdirectories too), and permission-code is a number between 0 and
  297. 7 that defines what the user may do.
  298.  
  299. The permission-code is a bit-map where the three least significant bits
  300. each have a specific meaning.  Here is a table:
  301.  
  302.     1 - read and directory access
  303.     2 - create access
  304.     4 - overwrite and delete access
  305.  
  306. The protection bits are added together to create the permission-code.  For
  307. example 3 (1+2) permit the user to read files and create new files but not
  308. overwrite or delete and existing file.  A permission-code of 7 (1+2+4)
  309. would permit full access.  Here are some examples:
  310.  
  311.     guest * \public 3
  312.     brian xyzzy \ 7
  313.  
  314. In these examples guest may log in with any password and may copy files or
  315. create new files in the directory \public while user brian must log in with
  316. password xyzzy but will be granted full access, e.g. read, write,
  317. overwrite, and delete, to all files in the system.  
  318.  
  319. If you are running in a radio-based environment I would not give out the
  320. latter user/password combination because it will give anyone access to 
  321. your entire disk.  Also remember that the user/password combination are
  322. broadcast in-the-clear for anyone to read (if they have trace turned on). 
  323. It is wise to segregate your radio-link users in a separate directory
  324. tree and not permit delete or overwrite access.  That should prevent
  325. malicious mischief.
  326.  
  327. Configuring NET and the AUTOEXEC.NET file:
  328.  
  329. Now you need to configure and run net.  Configuring net to run may be
  330. performed manually every time you start up NET.EXE but that gets old pretty
  331. fast.  There are usually many commands that must be typed the same way 
  332. every time net is started.  Fortunately Phil thought of this and provided 
  333. the AUTOEXEC.NET file.  The intention here is to place all the commands 
  334. that you always execute in a file to be read and executed by NET.EXE 
  335. whenever you start up.  To this end you will want to edit the file
  336. AUTOEXEC.NET prior to running NET.EXE.  Just use a text editor to enter the
  337. commands into the file AUTOEXEC.NET as you would type them at the "net>"
  338. prompt.
  339.  
  340. Setting the IP address:
  341.  
  342. When NET.EXE first starts up you need to tell it about many things, i.e what
  343. comm ports you have, what your IP address is, what your host name is, what
  344. other systems you will communicate with, what services you wish to provide,
  345. etc.  The first thing to do is to tell net who we are with the ipaddr,
  346. hostname, and mycall commands.  Enter your ip address in dotted decimal 
  347. notation enclosed in brackets or give the symbolic name from your HOSTS.NET 
  348. file.  Here is an example:
  349.  
  350.     ipaddr [44.96.0.1]
  351.  
  352. The selection of an address is very important.  If you are going to be part
  353. of a network you must have a unique address.  Talk to the person in your
  354. area who is responsible for coordinating addresses.  If you are not a
  355. part of the Internet and are just using this with your own computers, pick
  356. any address that suits you.
  357.  
  358. Hostname:
  359.  
  360. The hostname command is used to set the name of your system.  This is
  361. displayed when someone initiates an FTP session with your system.  Again
  362. here is an example:
  363.  
  364.     hostname wb6rqn-pc.dc.ampr.us
  365.  
  366. This corresponds to my system in my local domain.  For the purposes of
  367. amateur packet radio your callsign is probably sufficient.
  368.  
  369. Mycall (packet radio only):
  370.  
  371. Since I also run net on the air (amateur packet radio networking) I must
  372. specify my amateur call sign with the mycall command.  Again, here is the
  373. entry from my AUTOEXEC.NET file:
  374.  
  375.     mycall WB6RQN-0
  376.  
  377. The callsign is entered in the same form that is used with the standard
  378. TAPR TNC software, e.g. the callsign is followed by the SSID field.
  379.  
  380. If you are going to run TCP/IP on the air using the ax25 driver (described
  381. below with the attach command) the mycall entry MUST preceed the first
  382. attach command that uses the ax25 driver.  Otherwise there is no required
  383. order for these commands.
  384.  
  385. Attach command:
  386.  
  387. The attach command tells net about your comm ports and in what mode the
  388. ports will operate.  Currently four types of comm hardware are supported:
  389. standard PC async comm adaptors, the HAPN TNC board for the PC, the Eagle 
  390. RS-232/2 card, and the 3Com Ethernet controller.  Each of these devices 
  391. has its own version of the attach command.  Here is the attach command 
  392. for an async adaptor card acting as COM1:.  You would use this to attach 
  393. your pc to a TNC running the KISS code:
  394.  
  395.     attach asy 0x3f8 4 ax25 ax0 1024 256 4800
  396.  
  397. This means attach an asynchronous adapter whose port address is 3F8 hex
  398. using interrupt line 4 (both standard for com1:), as an ax25 device (KISS
  399. TNC), using a buffer size of 1024 and a maximum transmission unit (the
  400. largest packet you are allowed to send) of 256 bytes, running at 4800
  401. bauds.  The name of this device will be ax0 (until you exit from net).  
  402. This is probably a pretty good place to start.  If you want to also do 
  403. this on COM2, making you a dual-port or dual frequency switch, you would
  404. add the line:
  405.  
  406.     attach asy 0x2f8 3 ax25 ax1 1024 256 4800
  407.  
  408. If you are instead going to use COM2: to connect with another PC using a
  409. hardwired connection (some of us do have multiple PC's) you might want to
  410. use COM2: to connect to the other PC.  We would want to use SLIP to do this
  411. so the attach command would be:
  412.  
  413.     attach asy 0x2f8 3 slip sl0 1024 576 4800
  414.  
  415. If you have an HAPN TNC card for your PC you will want to enter the
  416. following attach command:
  417.  
  418.     attach hapn 0x3f8 4 ax25 h0 1024 256 csma
  419.  
  420. This tells net to use an HAPN board with the port address 3F8h and interrupt
  421. request line 4.  The speed of the board is determined by the board so the
  422. software has no control over that function.  The last parameter, listed as
  423. 'csma' in the example, may also take on the value 'full' for full duplex
  424. operation.
  425.  
  426. Recently the Eagle RS-232/2 card has become available at very reasonable
  427. prices.  This two-channel card generates HDLC frames directly and may be
  428. connected to a modem for direct packet radio operation without a TNC. 
  429. Normally it would be connected to a Bell-202-type half-duplex
  430. asynchronous modem.
  431.  
  432. The attach command for the Eagle board is almost identical to that of
  433. the standard async comm card.  Here is an example:
  434.  
  435.     attach eagle 0x300 5 ax25 eg0 2048 256 1200
  436.  
  437. Two items must be as shown in the example: the mode must always be ax25
  438. (not SLIP) and the media name must begin with 'eg' and end with a single
  439. digit.  The first Eagle card must be called eg0 and the second must be
  440. called eg1.
  441.  
  442. The Eagle card is hardwired for a base address of 0x300 and IRQ5.  The
  443. use of IRQ5 conflicts with the disk controller on the PC/XT (no problem
  444. with the PC/AT).  If you wish to use the Eagle card with a PC/XT or
  445. compatible you will need to locate the trace from pin 3 of the 74LS125 
  446. (U12) to B23 (IRQ5) on the edge connector.  Cut this trace at the edge 
  447. connector and reroute it to B4 (IRQ2) on the edge connector.  This will 
  448. eliminate the conflict and allow you to use IRQ2.
  449.  
  450. If you happen to have more than one PC you may wish to connect them using
  451. an Ethernet.  The net software supports the 3Com 3C500 or 3C501 boards for
  452. the PC.  The command to attach this board is:
  453.  
  454.     attach 3c500 0x300 3 arpa ec0 5 1500
  455.  
  456. This tells net that there is a 3Com 3C500 board at I/O address 300h using
  457. interrupt request line 3 with the media name ec0.  Net should reserve five
  458. buffers and the largest Ethernet packet may be 1500 bytes long.
  459.  
  460. A word about the selection of the value for the maximum transmission unit.
  461. For standard TNC's and radios 256 is probably the largest value you should 
  462. use.  This insures compatibility with the rest of the AX.25 community and
  463. insures that you are legal if you are operating unattended (part 97 of the
  464. FCC regulations specifically mentions the AX.25 protocol in permitting
  465. unattended digital operation above 50 MHz).  The smallest value you may use 
  466. is 64.  Performance improves with larger values IF you can get them to the 
  467. other end without errors.  I suggest you stick with 256 until you can run 
  468. some experiments of your own.  If you have a good transmission path and
  469. all the stations and gateways are attended, feel free to use larger values.
  470. It will result in improved performance (see the discussion of the mss and
  471. window parameters).
  472.  
  473. Param command:
  474.  
  475. If you are using a TNC running the KISS code (you probably are if you are
  476. operating amateur packet radio) you will need to set the parameters in the
  477. TNC.  This is accomplished with the param command.
  478.  
  479. There are five settable parameters in the kiss code.  They are:
  480.  
  481. 1.  Transmitter keyup delay (TXD).  This is how long the TNC will wait
  482.     after keying the transmitter prior to beginning to send data.  The
  483.     proper value for this parameter is dependent on your configuration.
  484.     This value is in 10's of milliseconds.  Acceptable values range from
  485.     0 (0 ms) to FFh (2,550 ms or 2.55 seconds).
  486.  
  487. 2.  Persistence (p).  This is the probability that the TNC will key your
  488.     transmitter if a slot is found empty (the channel is free).  Acceptable
  489.     values range from 0 (p = 1/255 = 0.4%) to FFh (p = 255/255 = 100%).
  490.     The default value is 40h (25%).  The optimum value is somewhere close
  491.     to 1/n where n is the number of users on the channel.
  492.  
  493. 3.  Slot time (ts).  This is how long that the TNC will wait between samples
  494.     of the channel.  Acceptable values range from 0 (0 ms) to FFh (2,550 ms
  495.     or 2.55 seconds).
  496.  
  497. 4.  Tail timer (tt).  This is how long the TNC will keep the transmitter
  498.     keyed after the last character has been transferred to the HDLC
  499.     controller.  This has become an outdated command since most of the 
  500.     TNC's now set this value automatically based on data rate.
  501.  
  502. 5.  Full Duplex.  A zero value (the defalult value) means operate the TNC
  503.     in half-duplex CSMA mode (listen before you transmit).  A non-zero
  504.     value means transmit whenever there is data to send.
  505.  
  506. Let us assume that on the channel associated with ax0 that I have a radio 
  507. that requires a transmit keyup delay of 200 ms, I want persistence to be 
  508. 20% (p=0.2), and I want the slot time to be 160 ms.  These are the values
  509. that we use in the DC area and make us "good neighbors" who do not "hog"
  510. the channel.  I would enter the following commands:
  511.  
  512.     param ax0 1 14
  513.     param ax0 2 33
  514.     param ax0 3 10
  515.  
  516. Note that the parameters are always specified as hexadecimal values.  Do 
  517. not make the mistake of typing 100 thinking that you are entering the 
  518. value one hundred.  The command processor only looks at the last two digits
  519. so the result would be to enter a value of 00.
  520.  
  521.     NOTE: The 'param' command will be used for issuing other 
  522.     device-dependent commands as the need arises.  Right now 
  523.     it is used only for setting the parameters for kiss TNC's
  524.     and the speed of SLIP and AX25 links.  Other versions of
  525.     the 'param' command will be added as the need arises.
  526.  
  527. Digipeat command (packet radio only):
  528.  
  529. If you are currently an active digipeater in your area you can also make
  530. your system continue to be a digipeater for those poor souls unlucky
  531. enough to still be running ordinary AX.25.  The command for this is:
  532.  
  533.     digipeat on
  534.  
  535. Mail Gateway:
  536.  
  537. The mail subsystem (SMTP) needs to know where to send mail should the
  538. destination be unknown to the sending system.  This is handled by the
  539. gateway command as follows:
  540.  
  541.     gateway wa3pxx
  542.     gateway [44.96.0.13]
  543.  
  544. Should you try to send mail to a host that is not in your HOSTS.NET file
  545. the mailer will route the mail to the system specified in the gateway 
  546. entry.  This presumes that the gateway system is smart enough to figure 
  547. out to whom the mail is addressed so that the mail can be forwarded.  At
  548. this time the mailer is not "smart" enough to act as a mail forwarding 
  549. node.  This field is only here should you be lucky enough to have 
  550. another computer accessable to you with a smart SMTP mailer.  Any UNIX
  551. 4.2 or 4.3 BSD system has such a mailer.
  552.  
  553. For packet radio enthusiasts another use for the gateway command is to 
  554. send mail on to your local BBS gateway station.  Bob Gibson, WA3PXX, has
  555. constructed a gateway program that will permit the transfer of mail from
  556. the WA7MBL BBS to SMTP and back again.  By having your local BBS run
  557. DoubleDos with the WA7MBL BBS in one partition and NET in the other you
  558. can automatically move mail between the two domains.
  559.  
  560. Construction of Routing Tables:
  561.  
  562. Now you need to construct the routing table.  This table is used by the IP
  563. to determine how to forward your packets.  Each entry consists of two or
  564. three parts, the IP address of the destination, the link upon which it is
  565. to be forwarded, and the IP address of the next station in line if there
  566. can be more than one IP address on the link (used if the mode is ax25
  567. and not used if the mode is slip).  Here are three sample entries, one for
  568. a station more than one hop away via ax25 to be forwarded by 44.96.0.7, 
  569. one for station one hop away on ax25, and one for a station on the other 
  570. side of a slip link:
  571.  
  572.     route add [44.96.0.5] ax0 [44.96.0.7]
  573.     route add [44.96.0.2] ax0
  574.     route add [44.96.0.12] sl0
  575.     route add n3ja ax0
  576.  
  577. The first string following the command 'route add' is the destination IP
  578. address.  The second field, i.e. ax0 or sl0, is the media and must match up
  579. with one of your previous attach commands.  The last field is the next
  580. station in the path if the destination is more than one hop away.  This is
  581. an optional field and only needs to be used if the media is a broadcast
  582. media such as Ethernet or AX.25 and the destination is more than one hop
  583. away.
  584.  
  585. Note that the address may be specified as either an IP address in dotted
  586. decimal notation enclosed in brackets or it may be a symbolic address
  587. from your hosts.net file.  If you choose the latter technique you must
  588. enter the symbolic address precisely as it was entered in the hosts.net
  589. file, e.g. upper and lower case characters in the name are significant.
  590.  
  591. If you are using an Eagle RS-232/2 board your media is named eg0 or eg1.
  592. There is still a problem because there are two ports on the board.  In
  593. order to solve this problem you will need to add the letters 'a' or 'b'
  594. to the media name.  For instance, if you have a single Eagle card your
  595. media names become 'eg0a' and 'eg0b' for the A and B ports of the card
  596. respectively.  Remember, take the media name from the attach command and
  597. append either A or B to the end of the name to select the appropriate
  598. port.  Here are some examples:
  599.  
  600.     route add [44.96.0.22] eg0a
  601.     route add aj9x eg0b wb3ffv
  602.  
  603. There are two other special types of route entries; the default entry and a
  604. cluster entry.  Here is a default entry:
  605.  
  606.     route add default ax0 [44.96.0.99]
  607.  
  608. This means that if the address does not match any entry in your table,
  609. route the packet to 44.96.0.99 via ax0.  Hopefully the switch at 44.96.0.99
  610. will be able to forward the packet to its destination.  This generally
  611. works well if you are merely an end node (a leaf) in the network and all
  612. your traffic goes to a single gateway.
  613.  
  614. Cluster Routing and its Associated Concepts:
  615.  
  616. The other option for routing is cluster routing.  It allows you to send
  617. blocks of addresses in a certain direction.  This is useful if all the
  618. users in a given area have some common part to their IP addresses.  Here is
  619. an explanation of cluster routing and addresses in general.
  620.  
  621. The IP address is thirty-two (32) bits long.  It is generally represented
  622. as four 8-bit numbers, with each number being written in decimal form.  For
  623. example, my IP address is 44.96.0.1.  This number can be represented as the
  624. hexadecimal value 2C600001 or 00101100011000000000000000000001 in binary.
  625. We can break this out as follows:
  626.  
  627. decimal           44        96         0         1
  628. hexadecimal       2C        60        00        01
  629. binary         00101100  01100000  00000000  00000001 
  630.  
  631. Normally when you make an entry in the routing table, all bits of the
  632. address are significant, e.g. an exact match is needed for the address to
  633. be recognized.  On the other end there is the default route in which any
  634. address matches.
  635.  
  636. Cluster routing falls somewhere between these two extremes.  Cluster
  637. routing allows you to specify how much of the address is to be considered
  638. valid.  In order to determine how many bits in the address are valid you
  639. enter the address in a special format:
  640.  
  641.       route add [44.96.0.64]/26 ax0
  642.  
  643. This means that only the first 26 bits of the address are to be considered
  644. significant.  This is a form of wild card for the address.  Here is that
  645. address in binary to show the mapping:
  646.  
  647.                00101100  01100000  00000000  01??????
  648.  
  649. The question marks in the above address show the least significant six bits
  650. being "wild," or matching any corresponding bits in the address.  Here are
  651. some examples:
  652.  
  653. 44.96.0.67     00101100  01100000  00000000  01000111  (a match)
  654. 44.96.0.89     00101100  01100000  00000000  01011001  (a match)
  655. 44.96.0.01     00101100  01100000  00000000  00000001  (no match)
  656.  
  657. This works because the routing process in the net code will, when 
  658. presented with an address, search for an exactly matching entry.  Failing 
  659. to find that it will then look for an address that matches on the most 
  660. significant 31 bits, then 30 bits, and so on.  If presented with the 
  661. address 44.96.0.67 IP would, after 6 tries, match the address to the 
  662. example given above.
  663.  
  664. By judiciously assigning addresses we can make the address aid us in
  665. routing the packets.  The users within a LAN should have something in
  666. common in the high order part of the address so that we can use a single
  667. entry in the routing table to make things go in the proper direction.  Here
  668. in the Washington DC area all addresses begin with 44.96.0.  This identifies 
  669. this general area and may be used to provide routing to us.  Once the
  670. packet arrives in our general area cluster routing is then used to further
  671. route the packets to the appropriate area.  In DC and the parts of Maryland 
  672. immediately surrounding DC the low order byte ranges from 0 to 63.
  673. Northern Virginia users get numbers in the range of 64 to 127.  The 
  674. Baltimore users get 128 to 191 while the Harrisburg, PA, users get 192 to 
  675. 255.  The idea being that we can use the top two bits in the low order byte 
  676. of the address to identify LANs within the address.  That way the bits in the
  677. high order part of the address will get you into the general area, the next
  678. part of the address will get you to the proper LAN, and the least
  679. significant bits will get you to the proper host or user.
  680.  
  681. Routing Loops and the Time To Live (TTL) Command:
  682.  
  683. It is quite possible (and likely!) to make errors when setting up
  684. routing tables that will cause a routing loop to occur (a routing loop
  685. is a circular path that never reaches the intended destination).  Imagine
  686. what would happen if two stations had their default routing pointing at 
  687. each other like this:
  688.  
  689. host 1 (44.96.0.1): route add default ax0 [44.96.0.2]
  690. host 2 (44.96.0.2); route add default ax0 [44.96.0.1]
  691.  
  692. In this case a packet that got routed using the default route would bounce
  693. back and forth between the two stations forever.  There is a command that
  694. can prevent this from going on forever: the Time-To-Live (ttl) command.
  695. Every IP packet has a ttl field in it that is decremented by 1 at every hop
  696. and decremented by 1 for every second it is in the network.  Normally net
  697. sets the ttl field to 255.  If you know that no host is more than 5 hops
  698. away you might issue the following command:
  699.  
  700.     ttl 5
  701.  
  702. This means that all packets from your host/station are sent with ttl set to
  703. an initial value of 5.  These packets will now be discarded if they haven't
  704. reached their destination after 5 hops.  This limits the traffic in the
  705. network should somebody inadvertantly create a routing loop.
  706.  
  707. Using Digipeaters and the ARP Add Command (packet radio only):
  708.  
  709. Since there may not be many TCP users in your area you may need to use a
  710. digipeater (or two) to reach the other users in your area.  This is now
  711. possible by adding entries to the ARP (Address Resolution Protocol)
  712. tables.  ARP serves to map IP addresses into Ethernet or AX25 address,
  713. whichever is appropriate to the media in use.  ARP normally does its
  714. work automatically by directly conversing with the other station but it
  715. cannot do that if the other station is reachable only via a digipeater. 
  716. In that case you must "hard-wire" an ARP table entry with the ARP ADD
  717. command.
  718.  
  719. Before you can use the ARP ADD command you must know the path to the
  720. other station.  Let us assume that the station with whom you wish to 
  721. communicate is WA4OIE (Other Internet Experimenter) whose address is
  722. 44.96.0.247, but the only path available is via WB3PID (Poor Inefficient
  723. Digipeater).  In this case you will use the following ARP ADD command:
  724.  
  725.     arp add [44.96.0.247] ax25 wa4oie wb3pbd
  726.  
  727. From this point on packets sent over an AX25 link to address 44.96.0.247
  728. will use the AX25 destination addres of WA4OIE with an intermediate
  729. digipeater address of WB3PBD.  If you need to use more than one
  730. digipeater it is permissable.  Just place the callsigns of the
  731. digipeaters sequentially following the destination AX.25 address.
  732.  
  733. Window and Maximum Segment Sizes:
  734.  
  735. The next information we want to include is some information used by TCP to
  736. determine how much data it can send at one time and how much data may be
  737. outstanding before it stops to wait for an ack from the other end.  Here
  738. are the example values:
  739.  
  740.     mss 216
  741.     window 648
  742.  
  743. The parameter mss stands for maximum segment size and represents the
  744. largest single segment that TCP will send.  Mss should be set as a
  745. function of the quality of the link over which you are running. 
  746. Relatively error-free links should use larger values of mss.  If you are
  747. running on amateur packet radio and wish to operate unattended you
  748. should probably limit this value to 216 (an mss of 216 will cause you to
  749. send AX.25 packets that are 256 bytes long.
  750.  
  751. The net program now compares the mss value and the mtu values given in 
  752. the attach command for the media being used.  Since TCP and IP each have
  753. a 20 byte header (a total of 40 bytes), an mss of 216 corresponds to an 
  754. mtu of 256.  If you are using mixed mtu's, i.e. 256 for AX.25, 1500 for 
  755. Ethernet, and 576 for SLIP, set the mss to correspond to the largest mtu
  756. you are using and let net adjust the mss downward for the media that are
  757. using smaller values for mtu.  In any case window should always be a 
  758. multiple of mss to prevent the transmission of "shortie" packets every 
  759. once in a while.
  760.  
  761. The 'window' parameter is how many bytes may be outstanding at any one 
  762. time before you wait for an ack.  If you have a pretty good link you can
  763. increase the value of mss.  If window is larger than mss TCP will run as
  764. a sliding window protocol, e.g. continue to send packets while waiting
  765. for ACKs on previously sent packets.  Since TCP uses selective reject 
  766. (resend ONLY those segments that were damaged or lost) this is not a very
  767. expensive proposition.
  768.  
  769. If you are running on a radio channel at 1200 bauds remember that a
  770. 1024 byte transmission will take seven seconds, a time that can make you
  771. unpopular if you have to share the frequency with AX.25 TNC's that can not
  772. adapt to the high channel utilization.  In those cases it is probably
  773. better to reduce window and/or mss values.  The above values will make you
  774. fit in reasonably with your other AX.25 neighbors.  Remember that the
  775. efficiency of large packets and long transmissions are probably not
  776. worth having your neighbors so angry that they tie a rope between your
  777. coax and the bumper of a pickup truck so that they can non-surgically
  778. remove your station from your shack.
  779.  
  780. One last point before we move on; the mss and window values that you set
  781. will be the ones that your TCP will ask the OTHER station to use.  When 
  782. the session is initially set up the two TCPs will exchange mss and window
  783. values.  This permits stations to automatically adjust to the capabilities
  784. of the other station.  For this reason it is best to get everyone in
  785. your LAN to use the same values.
  786.  
  787. Starting the Servers:
  788.  
  789. Next you need to decide what services you will provide to other users in
  790. the network.  You must start the servers or others won't be able to make
  791. use of your system for mail or file transfers.  You will simply be a switch
  792. for other users (in fact, for a switch on a hill that may be just what you
  793. want).  You will still be able to initiate file transfers or telnet 
  794. sessions but no one will be able to initiate one with you.  Should you fail
  795. to start the servers anyone trying to access those services on your machine
  796. will just receive a "Closed, (reset)" message.  For the sake of consistancy
  797. you will probably want to use the start command to enable the following 
  798. services:
  799.  
  800.     start telnet
  801.     start ftp
  802.     start smtp
  803.     start echo
  804.     start discard
  805.  
  806. Telnet is the terminal-to-host and terminal-to-terminal mode, ftp is the
  807. file transfer protocol, smtp is the mail system (simple mail transfer 
  808. protocol), and echo is the echo server (it just sends back any packets it
  809. receives -- good for finding out if a switch is out there and running). 
  810. The discard server simply throws away anything it receives.  The echo
  811. and discard servers are generally used for testing a link.
  812.  
  813.             Running the network
  814.  
  815. Start the networking program running by issuing the command "net."  You
  816. should be rewarded by having the "net>" prompt appear on your screen. 
  817. If you prepared AUTOEXEC.NET as described in the previous section then
  818. you don't need to issue any configuration commands.  If you have not set
  819. up AUTOEXEC.NET you will want to read that section of the manual prior
  820. to proceeding with this section.
  821.  
  822. Operating Modes:
  823.  
  824. Net provides two modes of operation: command and session.  In the command mode 
  825. you are interacting with the command interpreter to permit you to establish 
  826. sessions, retrieve status information, establish new routing table entries, 
  827. etc.  Please consider the commands you were required to enter in the 
  828. autoexec.net file.  All of those commands were directed at the command 
  829. interpreter.  You can tell that the net.exe command interpreter is waiting 
  830. for input because it will present this prompt:
  831.  
  832.        net>
  833.  
  834. The session mode is unique to the session with which you wish to
  835. communicate.  TELNET (terminal-to-host and terminal-to-terminal) and FTP
  836. (the File Transfer Protocol) are the two types of sessions with which
  837. you may interact and each has its own sets of commands and operating
  838. modes.
  839.  
  840. Before you get too carried away with trying things it is probably a good
  841. idea to read at least as far as the discussion on multiple sessions.  
  842. That will explain how to start and use TELNET and FTP as well as how to
  843. keep straight all the activity from multiple users.
  844.  
  845. Running TELNET:
  846.  
  847. TELNET is used to provide terminal mode access to a host computer system
  848. but may also be used to have a terminal-to-terminal "chat" with another 
  849. operator.  There are three commands directly associated with the TELNET
  850. service: the 'telnet', the 'eol', and the 'echo' commands.
  851.  
  852. The 'telnet' command:
  853.  
  854. The 'telnet' command is used to establish a TELNET session with a remote
  855. TCP socket, usually the TELNET server on a remote host.  To establish a 
  856. TELNET session you would issue the 'telnet' command as follows:
  857.  
  858.     telnet wb2sef
  859.     telnet [44.96.0.2]
  860.  
  861. Both of these commands would establish a TELNET session with the TELNET
  862. server at WB2SEF because WB2SEF is defined in hosts.net as having the 
  863. address 44.96.0.2.  Note that we merely specified that we wished to
  864. establish a TELNET session and the TELNET client then connected us with
  865. the TELNET server which resides at TCP port address 23.  There is an 
  866. extended syntax for the 'telnet' command that will let you specify the 
  867. port number at the remote host to which you wish to be connected.  Here
  868. is an example of the extended syntax:
  869.  
  870.     telnet [44.96.0.2] 7
  871.     telnet wb2sef 9
  872.  
  873. In the first example TELNET is being asked to establish a session with
  874. port number 7, the echo server, at the host whose address is 44.96.0.2. 
  875. The second example also is a request to connect to the host whose
  876. address is 44.96.0.2 but this time the connection is to be made to port
  877. number 9, the discard server.  These two ports are regularly used for
  878. test purposes, the echo server echoing back everything it receives and the
  879. discard server discarding everything it receives.
  880.  
  881. Once you have issued the 'telnet' command you will see the message 
  882. "SYN sent" followed a short time later by the message "Established" 
  883. (assuming that your destination was reachable).  At this point you would
  884. be in communication with the TELNET server on the other end.  If the 
  885. remote host is a timesharing computer (possibly running UNIX) you would 
  886. very shortly be presented with a login screen.  You may consider your 
  887. keyboard and screen to be directly connected to the remote computer at
  888. this point.
  889.  
  890. On the other hand maybe you were attempting to establish a connection with
  891. another computer running the net code.  In that case you would be in
  892. keyboard-to-screen communication with the operator at the remote host
  893. (assuming that he/she selected the new session as the current session; a
  894. subject that will be discussed later).  Whatever you type will appear on
  895. the other screen and vice-versa.
  896.  
  897. In addition to the 'telnet' command there are the 'eol' and 'echo'
  898. commands.  The 'echo' command determines what the TELNET client will do
  899. if the remote host offers to echo characters (what we would consider
  900. full duplex).  Here is the command syntax:
  901.  
  902.     echo accept    [the default value]
  903.     echo reject
  904.  
  905. If the remote host is a timesharing computer you probably want it to
  906. echo your characters back to you rather than let your local TELNET
  907. client echo the characters.  This permits you to use sophisticated
  908. screen-oriented programs without having your local echoing disrupt the
  909. screen display.  On the other hand you may prefer to reject echoing in 
  910. the case of a very slow network where having what you type appear on the
  911. screen several seconds later could be very annoying.  Please note that
  912. the setting of this parameter has no effect when entering a TELNET
  913. session with another copy of NET since NET always refuses to echo
  914. characters.
  915.  
  916. The 'eol' command is also used to adjust the keyboard functionality when
  917. remote echoing has been negotiated.  It is used to select the appropriate
  918. end-of-line character to be sent when the operator presses the <ENTER>
  919. or <RETURN> key.  Here are examples of the two options:
  920.  
  921.     eol standard         [the default value]
  922.     eol unix
  923.  
  924. Should you set 'eol' to 'unix' and remote echoing is negotiated by the
  925. two systems, the <RETURN> or <ENTER> key will send an ASCII linefeed
  926. character rather than the carriage return character.  Normally this will
  927. not be needed but some UNIX system demand this.  Should the remote host
  928. not respond to your <RETURN> key you might want to try this option.
  929.  
  930. To exit back to the command prompt from within a telnet session press
  931. the F10 key.  The 'net>' prompt will appear.  This does not close the
  932. TELNET session but merely suspends it.  Incoming data addressed to your
  933. TELNET session will be saved until you re-enter the session (see the
  934. discussion of changing sessions that follows later).
  935.  
  936. The last item of interest to the TELNET user is how to terminate a
  937. TELNET session.  That is accomplished with the 'close' command.  To
  938. close the session simply press the F10 key to return to the command
  939. prompt and enter the 'close' command.  You should be rewarded with the
  940. sequence of messages:
  941.  
  942.     FIN wait 1
  943.     FIN wait 2
  944.     Time wait    [followed by a delay period of about 30 seconds]
  945.     Closed (Normal)
  946.  
  947. File Transfer (FTP):
  948.  
  949. The File Transfer Protocol (FTP) permits you to send and receive both
  950. text (ASCII) and binary (image) files.  The FTP application accepts many
  951. commands that will permit you to create files, delete files, change
  952. directories, and copy files.  This section will guide you through the
  953. most used FTP commands.
  954.  
  955. Establishing a Session:
  956.  
  957. To establish an FTP session with a remote host you use the 'ftp'
  958. command.  To establish an FTP session with WB2SEF I would use one of the
  959. following commands:
  960.  
  961.     ftp wb2sef
  962.     ftp [44.96.0.2]
  963.  
  964. Both commands do the same thing because of the information contained in
  965. my HOSTS.NET file.  After issuing one of the above commands you would
  966. see the usual 'SYN sent' and 'Established' messages.  You would then be 
  967. greeted by a message from the remote FTP server that looked something
  968. like this:
  969.  
  970.   220 wb2sef-pc.dc.ampr.us (Fri Sep 18 17:57:23 1987) FTP Ready
  971.  
  972. This message tells you that the remote FTP is ready to accept commands
  973. from you.  FTP gives you no prompt so at this point you must understand
  974. that after issuing a command you will be notified of the command's
  975. completion but no further prompting for messages will occur.  One thing 
  976. to note is that when FTP sends you a message it will always be prefixed
  977. with a three-digit number.  This is for the benefit of computer programs
  978. that may be driving the FTP system.  The number is for the benefit of
  979. the computer and the text is for the benefit of the user.
  980.  
  981. The first thing you will need to do is to log in to the remote host with
  982. your user ID and your password.  Unless you have been given a specific
  983. user ID and password by someone at the remote host you will probably log
  984. in with the guest user ID and password.  You will send the 'user' and
  985. 'pass' commands and the remote host will send the numbered messages.  
  986. Here is an example:
  987.  
  988.     user guest
  989.     331 Enter password
  990.     pass xyzzy
  991.     230 Logged in
  992.  
  993. This exchange presumes that your user ID is "guest" and that your
  994. password is "xyzzy."  If the user ID does not require a password you may
  995. or may not be prompted for the password.  NET always prompts for the
  996. password whether it needs it or not.  If the remote host is running NET
  997. and has in its FTPUSERS file an entry that uses an asterisk (*) for the
  998. password, any password will be accepted.
  999.  
  1000. If you enter either an invalid user ID or an invalid password the remote
  1001. FTP will return the following message:
  1002.  
  1003.     550 Permission denied
  1004.  
  1005. Simply reenter the 'user' and 'pass' commands with the proper values and
  1006. you will be logged in.  You may also enter new 'user' and 'pass'
  1007. commands at any time to change your user ID and hence your permissions
  1008. as far as the remote host is concerned.
  1009.  
  1010. Manipulating Directories on the Remote Host:
  1011.  
  1012. When you log into the remote host you will be set in "your" directory (I
  1013. put the word your in quotes because many people may be using that
  1014. directory since many people may be allowed to log in concurrently with
  1015. the same user ID).  You can get a directory listing of files within that
  1016. directory with the 'dir' command (just like DOS).  What you will receive
  1017. back from the remote host will be a standard DOS directory listing.  If
  1018. you would prefer a short listing, e.g. only the names of the files, you
  1019. can use the 'ls' command.  Both commands will accept wildcards so the
  1020. following commands are all valid:
  1021.  
  1022.     dir
  1023.     ls *.*
  1024.     dir *.com
  1025.     ls test*.dat
  1026.  
  1027. After issuing the command you will see the following sequence of
  1028. responses from the remote host:
  1029.  
  1030.     200 Port command okay
  1031.     150 Opening data connection for LIST \dir
  1032.     .
  1033.     .
  1034.     Your directory listing will be displayed here
  1035.     .
  1036.     .
  1037.     Get completer, nnnn bytes received
  1038.     226 File sent OK
  1039.  
  1040. The end of the "150 Opening data connection ..." response will differ
  1041. depending on the directory request you made.  If you used the 'dir'
  1042. command you would see the word "LIST."  If you used the 'ls' command you
  1043. would see the word "NLST."  What followed the "LIST" or "NLST" would be
  1044. the name of the directory you are listing.
  1045.  
  1046. In addition to listing directories you can change the directory and
  1047. query for the current directory.  Let us assume that for your user ID
  1048. (guest) your root directory is \public.  Let us also assume that in
  1049. public you would find the three subdirectories tcp, games, and utils. 
  1050. When you log in your directory is set to \public.  Now you issue one of
  1051. the following commands:
  1052.  
  1053.     cd tcp
  1054.     cd \public\tcp
  1055.  
  1056. The result would be the same since you were already in directory
  1057. \public.  FTP would then send you the response:
  1058.  
  1059.     257 "\public\tcp" is current directory
  1060.  
  1061. You may use the 'cd' command to change directory to any subdirectory
  1062. below your home directory in the same way that the DOS cd command will
  1063. also allow you change directories.
  1064.  
  1065. If you are not sure what directory you are in you may use the 'pwd'
  1066. (print working directory) command.  If we were to issue the command:
  1067.  
  1068.     pwd
  1069.  
  1070. the remote FTP would then respond:
  1071.  
  1072.     257 "\public\tcp" is current directory
  1073.  
  1074. as if you had just changed directories.
  1075.  
  1076. Now we get down to the meat of the matter: sending and receiving files. 
  1077. Prior to doing a file transfer you need to tell FTP what type of
  1078. transfer to use.  You have two choices: ASCII (text files) or Image
  1079. (binary files).  To select what type of transfer to do you use the 
  1080. 'type' command.  Here are the two possibilities:
  1081.  
  1082.     type i
  1083.     type a
  1084.  
  1085. The former will set all subsequent transfers to image mode for sending
  1086. binary files.  The latter will set all subsequent transfers to ASCII
  1087. mode for sending or receiving text files.  If you use the 'type' command
  1088. by itself like:
  1089.  
  1090.     type
  1091.  
  1092. FTP will respond with either the word "Image" or "Ascii," whichever is
  1093. appropriate.  If you do not specify a type of transfer FTP will use the
  1094. default value "ASCII."
  1095.  
  1096. Files transferred with type set to ASCII will have their newline
  1097. sequence translated to that expected by the remote host.  Files
  1098. transferred with type set to image will have no translation performed at
  1099. all.  All bytes in the file will be transferred with no changes whatsoever.
  1100.  
  1101. Once you select the type of transfer you desire you may then send or
  1102. receive files.  The 'put' and 'get' commands are used to send and
  1103. receive files respectively.  Let us assume that I have a file on my
  1104. system in my current directory called "foo" and I want to transfer it to
  1105. the remote host and have it placed in my current directory there.  To do
  1106. this I would use the following command:
  1107.  
  1108.     put foo
  1109.  
  1110. FTP would then transfer file "foo" from the local to the remote system. 
  1111. You would be know the status of the transfer from the following sequence
  1112. of messages:
  1113.  
  1114.     200 Port command okay
  1115.     150 Opening data connection for STOR foo
  1116.     Put complete, nnn bytes sent
  1117.     226 File received OK
  1118.  
  1119. Now let us fetch file "bar" from the remote system.  Here is your
  1120. command the the responses from FTP:
  1121.  
  1122.     get bar
  1123.     200 Port command okay
  1124.     150 Opening data connection for RETR bar
  1125.     Get complete, nnn bytes received
  1126.     226 File sent OK
  1127.  
  1128. Now it may not be convenient to have the file retain its filename when
  1129. it is copied.  Perhaps there is already a file with the same name at the
  1130. destination and you do not wish to, or may not be permitted to,
  1131. overwrite the file.  In that case you would add the destination filename
  1132. to the get or the put command as follows:
  1133.  
  1134.     put foo bar
  1135.     get \public\tcp\herfile herfile
  1136.  
  1137. In the first example the local file "foo" would be copied to file "bar"
  1138. on the remote system.  In the second example the file
  1139. "\public\tcp\herfile" would be copied to "herfile" on the remote system.
  1140. The reason for doing it this way in the second example is to avoid
  1141. having FTP try to create the file "\public\tcp\herfile" on the remote
  1142. end.  Perhaps there is no directory "\public" or "\public\tcp" or
  1143. perhaps you are in an FTP session with a system that has completely
  1144. different file naming conventions (remember that you may be
  1145. communicating with systems other than PC's).
  1146.  
  1147. You may at some point want to terminate a transfer that is currently in
  1148. progress.  The 'abort' command is used for this.  There are no
  1149. parameters on the abort command.  Just type 'abort' and the current
  1150. transfer will be aborted.
  1151.  
  1152. When done using FTP use the command 'quit.'  'Quit' will get you the
  1153. following message sequence:
  1154.  
  1155.     221 Goodbye!
  1156.     Close wait
  1157.     Last ACK
  1158.     Closed (Normal)
  1159.  
  1160. All of this indicates that FTP has properly terminated the session and
  1161. returned you to the command interpreter.
  1162.  
  1163. Multiple Sessions:
  1164.  
  1165. One of the advantages of NET is that it permits you to establish many
  1166. sessions concurrently.  For instance, you could establish an FTP session
  1167. with a host and then switch back to the command interpreter so that you
  1168. could start another session.  The nice thing about this is that it in no
  1169. way interferes with any sessions that are already running.  Your FTP
  1170. session continues to transfer data even while you enter into a TELNET
  1171. session with the same or a different host.  Any screen output that 
  1172. arrives for a session that is not the currently selected session will be
  1173. held until you again select that session.  This prevents you from losing
  1174. any output while you interact with another session or with the command
  1175. interpreter.
  1176.  
  1177. As mentioned, in order to start a new session (or issue any other type
  1178. of command for that matter) you must be interacting with the command
  1179. interpreter.  To get to the command prompt you need only press F10. 
  1180. Once at the command prompt you can examine or select a new session using
  1181. the 'session' command (abrievated 'se').
  1182.  
  1183. The session command when used by itself will give you a list of all the
  1184. currently open session.  Here are two examples:
  1185.  
  1186.     session
  1187.     se
  1188.  
  1189. The result will be a display similar to the following:
  1190.  
  1191.          #  TCB  Type    State        Remote socket
  1192.          0  c7a8 Telnet  Established  w3fws:23
  1193.         *1  c434 FTP     Established  [44.96.0.13]:21
  1194.  
  1195. The first field (#) is the session number.  The asterisk (*) identifies 
  1196. the current session.  TCB is the TCP Control Block associated with this
  1197. session (TCB is explained in detail as part of the tcpstat command later
  1198. in this document).  The Type field identifies the session as either an
  1199. FTP or a TELNET session.  The state field indicates the state of the
  1200. "connection" as far as this session is concerned.  A value of SYN Sent
  1201. indicates that the "connection" is in the process of being constructed. 
  1202. A value of Established indicates that the "connection" and therefore the
  1203. session is open and ready to transfer information.  Values of FIN Wait
  1204. 1, FIN Wait 2, or Time Wait indicate that the connection is being
  1205. closed.  The last field, Remote Socket, identifies the host and port with
  1206. whom the session was initiated.
  1207.  
  1208. Once you start a session it becomes your current session unless you
  1209. close it or switch to another session.  To get back to a session from
  1210. the 'net>' prompt all you need to do is press the <RETURN> or <ENTER> key.
  1211. If you happened to close the current session there will be no current 
  1212. session.  In that case pressing <RETURN> or <ENTER> will have no effect.
  1213. You will need to explicitly select a new session with the session
  1214. command.
  1215.  
  1216. If you follow the session command with a number, the session command 
  1217. will make the session whose number was specified, the current session and
  1218. then turn control of the keyboard and screen over to that session.  Here
  1219. are two examples:
  1220.  
  1221.     session 0
  1222.     se 0
  1223.  
  1224. Both of these examples change the current session to session 0.  At that
  1225. point you will be interacting with the desired session.
  1226.  
  1227. As mentioned in the section on the 'telnet' command you close a session
  1228. by making that session the current one and then issuing the 'close'
  1229. command at the 'net>' prompt.  This will work for both FTP and TELNET
  1230. sessions.  While this is the only way to close a TELNET session, it is
  1231. neither the only nor the most desireable way to close an FTP session.
  1232.  
  1233. Last of all you may need to abort a session or an open socket.  This may
  1234. occur when you have a session with another host and that host goes away
  1235. for whatever reason (power failure, hardware failure, link failure,
  1236. etc.).  In that case you must resort to the 'reset' command.  The
  1237. 'reset' command is a way to force TCP to close a particular socket
  1238. without having to go through the normal closing sequence.  The command
  1239. format is the command 'reset' followed by a TCB number.  Here is an
  1240. example:
  1241.  
  1242.     reset c7a8
  1243.  
  1244. This example would force TCP to close the socket associated with the 
  1245. session with 44.96.0.13 and hence close that session.  It would give no
  1246. indication to the other end that the socket had been closed.  The only
  1247. indication that the other end would receive would be to receive a reset
  1248. instead of an ACK packet the next time the remote end sent a packet of
  1249. data.
  1250.  
  1251. Status Monitoring and Other Commands:
  1252.  
  1253. There are quite a few commands in net.exe.  Many of them were explained in 
  1254. conjunction with the installation instructions and, in fact, have little use 
  1255. beyond initialization.  Commands in this catagory include:
  1256.  
  1257.        ipaddr-----setting your IP address
  1258.        mycall-----setting your AX.25 link address
  1259.        ttl--------initial time-to-live field for IP packets
  1260.        attach-----starting a driver for a particular hardware device
  1261.        mss--------setting the maximum size for a TCP segment (packet)
  1262.        window-----setting the maximum number of un-acked bytes
  1263.        digipeat---enable/disable AX.25 digipeating
  1264.        hostname---set the name for your system (used by FTP)
  1265.  
  1266. On the other hand there are quite a few commands that you will be using 
  1267. extensively.  Let's start by covering the status commands.
  1268.  
  1269. Getting Status Information:
  1270.  
  1271. IPSTAT
  1272.  
  1273. The first of the status commands is 'ipstat' and may be abbrieviated 'ips'.  
  1274. This returns information about the status of IP packets that have passed 
  1275. through your system: e.g. originated, received, or passed through 
  1276. (switched).  The format for the ipstat response looks like this:
  1277.  
  1278.      total 973 runt 0 len err 0 vers err 0 chksum err 5 badproto 0
  1279.  
  1280. The 'total' field (973 in this case) identifies the number of IP datagrams 
  1281. that have passed through your system.  The next field, 'runt', identifies 
  1282. the number of packets that were below minimum acceptable size.  'Len err' 
  1283. identifies the number of packets with length errors.  'Vers err' identifies 
  1284. packets that came from a system running a version of IP that is incompatible 
  1285. with the one that you are running (unlikely to occur unless the Internet 
  1286. adopts a new standard for IP).  'Chksum err' is the number of packets that 
  1287. arrived with a checksum error on the IP header (these packets will be 
  1288. discarded because the system has no way of knowing if any of the information 
  1289. is valid).  'Badproto' identifies the number of packets that arrived with 
  1290. the protocol identifier set to an upper layer protocol (ULP) that is not 
  1291. either TCP or UDP (the only two ULP's that are currently supported in 
  1292. net.exe).
  1293.  
  1294. Of all these possible errors you are likely to see only the runt, len err, 
  1295. and chksum err fields increment.  Version and bad protocol errors can only 
  1296. occur if you are communicating with a system that supports a different 
  1297. version or a different set of ULP's.  This is unlikely to happen.
  1298.  
  1299. TCPSTAT
  1300.  
  1301. Another often used command is the tcpstat command.  Tcpstat returns a great 
  1302. deal of information on the current status of your TCP "connections."  Upon 
  1303. entering the command 'tcpstat' (abrieviated 't') the system will print a 
  1304. General status on the TCP activity and an abrieviated display on the status 
  1305. of each TCP session.  The top line looks like this:
  1306.  
  1307.      Conout 5 Conin 17 Reset out 2 Runt 0 Checksum err 1 bdcsts 0
  1308.  
  1309. 'Conout' is the number of TCP outgoing "connections" that have  originated 
  1310. at your system while 'conin' is the number of incoming "connections" that 
  1311. have been made with your system.  'Reset out' is the number of resets that 
  1312. were sent to remote systems (this would happen if a remote system attempted 
  1313. to send data to a socket that had been closed).  The 'Runt' field is the 
  1314. number of undersized packets that were received.  The 'Checksum err' field 
  1315. is the number of TCP segments that were discarded because the segment failed 
  1316. the TCP checksum check (IP checksums only the packet header while TCP 
  1317. applies a checksum test to the entire TCP segment including header).  The 
  1318. last field indicates the number of broadcast messages that have been 
  1319. received.
  1320.  
  1321. Following the header line a table is presented, one line per socket.  The 
  1322. headings appear as follows:
  1323.  
  1324. &TCB  Rcv-Q  Snd-Q   Local Socket      Remote Socket   State
  1325.  
  1326. f784    17      0    44.96.0.1:1001    44.96.0.2:23    Established
  1327. eb30     0      0    44.96.0.1:23      0.0.0.0:0       Listen (server)
  1328.  
  1329. In the above example there are two open sockets.  The first, associated with 
  1330. the TCP Control Block (TCB) at address f784, is a TELNET 
  1331. (terminal-to-terminal or terminal-to-host) session with the system whose 
  1332. address is 44.96.0.2.  The second socket, described by the TCB at location 
  1333. eb30, is a passive open that exists to accept incoming TELNET connections.  
  1334. Now for a more comprehensive description of the fields.
  1335.  
  1336. The TCB is the TCP control block.  The number, in hex, is the address of the 
  1337. TCB in memory and serves to identify a particular open socket.  Rcv-Q is the 
  1338. number of octets (8-bit things that we normally call bytes) that have been 
  1339. received and are waiting to be processed (this is one way to tell if you 
  1340. have received information from another station if you are involved in more 
  1341. than one TELNET or FTP session).
  1342.  
  1343. The next two fields, Local Socket and Remote Socket, make up the 
  1344. identification of the connection as far as TCP is concerned.  The first part 
  1345. of a socket number is the IP address.  The second part of the socket number, 
  1346. the part following the colon, is the port number.  There are many "standard" 
  1347. port numbers in use.  Here are some of the more common:
  1348.  
  1349.                Port    Application
  1350.  
  1351.                  7     Echo server
  1352.                  9     Discard server
  1353.                 20     FTP server data port
  1354.                 21     FTP server command port
  1355.                 23     TELNET server
  1356.                 25     SMTP server
  1357.  
  1358. You may see other port numbers used such as 1001, 1002, etc.  These are 
  1359. temporary ports that are used to form a unique connection (TCP identifies a 
  1360. connection by combining the remote and local socket address in order to 
  1361. guarantee uniqueness).
  1362.  
  1363. Since no two systems have the same network address the combination of local 
  1364. socket (address + port) and remote socket forms a unique combination.  This 
  1365. is how the TCP on both ends of a "connection" identifies that connection.
  1366.  
  1367. It is possible to get even more information about a specific socket by 
  1368. adding the TCB address to the end of the tcpstat command like this:
  1369.  
  1370.        tcbstat f784
  1371.  
  1372. This will return the detailed TCP status information about the socket that 
  1373. is described by the TCB at address f784 (you get this address from the 
  1374. tcpstat command without a parameter).  Here is the sample format:
  1375.  
  1376. Local: 44.96.0.1:1001 Remote: 44.96.0.2:23 State: Established
  1377.       Init Seq   Unack     Next      WL1      WL2  Wind   MSS Queue   Total
  1378. Send:   5367e0
  1379. Recv:   593870
  1380. Retry 0 Timer stopped Smoothed round trip time  4687 ms
  1381.  
  1382. The 'Init Seq', 'Unack', 'Next', 'WL1', and 'WL2' fields have to do with the 
  1383. sliding window nature of TCP.  Continuous monitoring of these fields can give 
  1384. you a good idea of the performance of the network in terms of the number of 
  1385. packets lost.  The 'Wind' field is the number of bytes that the channel can 
  1386. 'hold' at any one time.  Whenever a TCP segment is transmitted the window 
  1387. 'closes' by the number of bytes in that segment.  The receipt of an
  1388. appropriate ACK can make the window open up (not all ACKs will make the
  1389. window open because TCP permits receipt of segments out of order).  Should
  1390. the window close completely the sending station will then wait for an ACK so
  1391. that it may begin sending again. 
  1392.  
  1393.     NOTE: A good understanding of sliding window protocols is 
  1394.     required to make use of the information presented in these 
  1395.     particular fields and a complete explanation is beyond the 
  1396.     scope of this document.  See RFC-793 or MIL-1778 for more 
  1397.     details on the specific sliding window algorithms used in TCP.
  1398.  
  1399. The 'MSS' field displays the maximum segment size; the maximum number of 
  1400. bytes that may be sent as a single TCP segment (packet).  
  1401.  
  1402. Both the maximum window size and MSS are "negotiated" by the TCPs running in 
  1403. the two communicating system.  Essentially this means that the two ends 
  1404. "agree" on the best values to use for these parameters.  When you set a 
  1405. value for window size and a value for MSS in your machine, those values are 
  1406. communicated to the remote end when a socket is opened.  That allows the 
  1407. remote end to know how much information you are prepared to accept and to 
  1408. prevent the remote end from sending you too much information.  Remember, the 
  1409. values for window and MSS that you set on your system will be the values 
  1410. that the other station will use when sending to you.  Also remember that the 
  1411. two ends may set different values and still work effectively.
  1412.  
  1413. As an aside, you are permitted to change the value of MSS or WINDOW while
  1414. the net program is running.  On the other hand, changing the value of MSS
  1415. or WINDOW after a socket has been opened will have no effect on any currently
  1416. open sockets.  Open sockets will continue to use the value for MSS that they
  1417. negotiated when the socket was opened.  The changed values will be used
  1418. when TCP opens a new socket.
  1419.  
  1420. The Queue field indicates how many bytes of data are waiting at a particular 
  1421. socket.  In the case of the send queue this field indicates the number of 
  1422. bytes transmitted but not yet acknowledged.  During SMTP and FTP sessions it 
  1423. is not unusual to see this value equal to the window size.  In the case of 
  1424. the receive queue the value indicates the number of bytes that have been 
  1425. received but have not been "picked-up" by the application.
  1426.  
  1427. The Total field indicates the number of bytes that have been received or 
  1428. transmitted on a socket since the socket was opened.  This information is 
  1429. very useful during an FTP session because it will tell you the total number 
  1430. of bytes transferred on the file (FTP opens a new data socket for every 
  1431. transfer, closing the socket when the transfer is complete).  If you know 
  1432. the size of the file ahead of time you can use this information to determine 
  1433. how much of the file has reached the receiving end -- nice information to 
  1434. know when doing a long file transfer over a slow or unreliable link.
  1435.  
  1436. The next field is the retry counter.  If a segment is not acknowledged 
  1437. within an appropriate period TCP will retransmit that segement because it 
  1438. will assume that the segment was lost somewhere in the network.  Each time 
  1439. it retransmits a segment the 'Retry' counter is incremented.  TCP never
  1440. gives up sending data.  It does 'back off' and send segments less and
  1441. less frequently in order to reduce network loading.
  1442.  
  1443. The next field is the 'Timer' field.  It displays the status of the timer 
  1444. for this particular socket.  If TCP is waiting for an acknowledgement to an 
  1445. outstanding segment there will be a time displayed in this field.  If there 
  1446. are no outstanding segments the word "stopped" will indicate that the timer 
  1447. is not running.
  1448.  
  1449. The last field, 'round trip time', is a very interesting piece of 
  1450. information.  It is the amount of time that TCP has determined that it takes 
  1451. for an outgoing segment to arrive at its destination and for its 
  1452. acknowledgement to return.  This value is used to detwrmine the proper 
  1453. setting for the retry timer thus allowing TCP to adapt to the changing 
  1454. conditions of the underlying network and to prevent the network from being 
  1455. flooded by unnecessary retransmissions.
  1456.  
  1457. The tcpstat command is probably the most-used command in the net program.  
  1458. Don't be afraid of it, use it!  You may not understand all the fields
  1459. but you will quickly pick up what is important and what you can ignore. 
  1460. Experiment with it so that you understand it better.  It is a key to 
  1461. pinpointing network performance problems.
  1462.  
  1463. UDPSTAT
  1464.  
  1465. The next status command of interest is 'udpstat,' used for getting status 
  1466. information about information that has been received for the User Datagram 
  1467. Protocol (UDP) ULP.  This command may be abbreviated 'u.'  When an 
  1468. application makes use of the UDP transport service it opens a UDP socket.  
  1469. The udpstat command will display the status of the transport service and of 
  1470. each of the open sockets.  Here is an example of the output of a udpstat 
  1471. command:
  1472.  
  1473. sent 51 rcvd 50 bdcsts 0 cksum err 0 Unknown Socket 9
  1474. &UCB  Rcv-Q  Local Socket
  1475.  
  1476. ff38    293  44.96.0.1:3
  1477.  
  1478. In this example the 'sent' and 'rcvd' fields indicate how many UDP datagrams 
  1479. have been sent and received respectively.  The 'bdcsts' field identifies the 
  1480. number of broadcast datagrams that have been received.  The 'cksum err' 
  1481. field indicates how many datagrams have been received with errors while the 
  1482. 'Unknown Socket' field shows the number of datagrams that have been received 
  1483. that were addressed to unknown (unopened) sockets.
  1484.  
  1485. Following the general information is the specific information about all of 
  1486. the currently open sockets.  Each open socket is identified by the address 
  1487. of its UDP Control Block (&UCB).  Following that is the number of bytes that 
  1488. have been received and placed on the receive queue (Rcv-Q).  Last comes the 
  1489. actual socket identifier consisting of the IP address concatenated with the 
  1490. port number.
  1491.  
  1492. Other Status Commands:
  1493.  
  1494. This section will be added later.
  1495.  
  1496. Other Useful Commands:
  1497.  
  1498. This section will be added later.
  1499.  
  1500.                   BM -- Sending and Receiving Mail
  1501.  
  1502. This section will be added later.
  1503.  
  1504.                    Running NET and BM Concurrently
  1505.  
  1506. In order to get the greatest use out of NET it is important to have it
  1507. running all the time.  The problem with that is that DOS is not a
  1508. multitasking operating system.  It is very frustrating to have to start
  1509. and stop NET every time you want to do something else.  There is a
  1510. solution: DoubleDos.
  1511.  
  1512. The DoubleDos package from SoftLogic Solutions, Inc, solves this problem
  1513. nicely.  It permits you to split your memory into two partitions and
  1514. allow each program to operate as if it had its own PC.  Phil Karn wrote
  1515. NET with DoubleDOS in mind and even included the necessary code in NET
  1516. so that it can effectively reside with other programs without
  1517. performance penalties to either NET or the other program running in the
  1518. other partition.  This will also allow you to send and receive mail with
  1519. BM while NET is still running.  That way you will not have to exit from
  1520. NET everytime you want to prepare a mail message or read mail that has
  1521. arrived. 
  1522.  
  1523. The first step in using NET with DoubleDOS is to install DoubleDOS
  1524. according to the instructions.  Part of installing DoubleDOS is to
  1525. modify the file \DDCONFIG.SYS for your environment.  Many things can be
  1526. changed in DDCONFIG.SYS but two are important to NET: size and program
  1527. to load in the bottom partition.  When you edit DDCONFIG.SYS you will
  1528. find a field named 'bottom size' and a field named 'bottom program.'  If
  1529. you want NET to be started automatically when you start DoubleDOS enter
  1530. the following in DDCONFIG.SYS:
  1531.  
  1532.     bottom program = \net.exe
  1533.  
  1534. DoubleDOS will normally split the available memory in half.  This is not
  1535. the best solution because we know how much memory NET needs and we can
  1536. then make sure that all of the rest of the available memory is available
  1537. for the other partition.  NET itself needs about 128 Kb of memory.  In
  1538. addition, NET needs COMMAND.COM also loaded in its partition.  For this
  1539. reason you will probably want to allocate about 175 Kb to the bottom
  1540. partition where NET will run.
  1541.  
  1542. Let us assume that you want to have both DoubleDOS and NET start when
  1543. your system boots (just what you want after a power hit).  Add the
  1544. following entry to your AUTOEXEC.BAT file:
  1545.  
  1546.     \doubledo
  1547.  
  1548. That will cause DoubleDOS to start and DoubleDOS will automatically
  1549. start NET.
  1550.  
  1551.